import axios from "axios";
import Msg from '~/utils/msg';

import { sm4 } from 'sm-crypto';

// SM4 密钥（16字节）
const SM4_KEY = '1234567890abcdef1234567890abcdef' // 替换为你的密钥

// 加密函数
function sm4Encrypt(data) {
    return sm4.encrypt(data, SM4_KEY);
}

// 解密函数
function sm4Decrypt(encryptedData) {
    return sm4.decrypt(encryptedData, SM4_KEY);
}

const service = axios.create({
    //基础URL
    baseURL: import.meta.env.VITE_API_BASE_PREFIX,
    //请求超时30秒
    timeout: 30000
    // headers: {
    //     'Content-Type': 'application/json' // 默认 Content-Type 设置为 application/json
    // }
})
//请求拦截器
service.interceptors.request.use(function (config) {
    // 检查是否为文件上传请求
    if (config.headers['Content-Type'] && config.headers['Content-Type'].includes('multipart/form-data')) {
        // 如果是文件上传请求，直接返回 config 不进行加密
        return config;
    }
    if (config.url.includes("myDruid/doLogin")) {
        return config;
    }

    // 对其他请求进行加密处理
    if (config.data) {
        config.data = { data: sm4Encrypt(JSON.stringify(config.data)) };
    }
    return config;
}, function (err) {
    // 请求错误
    return Promise.reject(err);
});

//响应拦截器
service.interceptors.response.use(function (response) {
    //对响应数据做点什么
    if (response.config.url.includes('api-docs')) {
        return response.data;
    }
    if (response.data !== null && response.data !== undefined && response.data !== '') {
        const decryptedData = JSON.parse(sm4Decrypt(response.data))
        return decryptedData;
    }
    return response.data;
}, function (res) {
    //响应错误
    Msg.error(sm4Decrypt(res.response.data) || '请求失败')
    return Promise.reject(res);
});

export default service